home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Meeting Pearls 4
/
Meeting Pearls Vol. IV (1996)(GTI - Schatztruhe)[!].iso
/
Pearls
/
etech
/
GALer20
/
Source
/
GALer
/
GALer.c
< prev
next >
Wrap
C/C++ Source or Header
|
1996-04-05
|
46KB
|
1,424 lines
/******************************************************************************
** GALer.c
*******************************************************************************
**
** author: Christian Habermann, (c)1991-96 by Christian Habermann
** Asamstr. 17
** 85356 Freising
** Germany
** version: 2.0
** date: 07.02.1996
**
** used compiler: SAS-C 6.51
**
*******************************************************************************
**
** description:
** This is the software which is necessary to read/program GALs via
** GALer's hardware.
**
** Both the hardware and the software of the GALer project are copyright
** by Christian Habermann.
**
*******************************************************************************
**
** changes:
** date | author | comment
** | |
** | |
******************************************************************************/
/********************************* includes **********************************/
#define STRINGARRAY 1
#include <libraries/mui.h>
#include <devices/parallel.h>
#include <exec/io.h>
#include <exec/memory.h>
#include <exec/ports.h>
#include <exec/types.h>
#include <exec/interrupts.h>
#include <libraries/reqtools.h>
#include <libraries/locale.h>
#include <libraries/gadtools.h>
#include <resources/misc.h>
#include <resources/cia.h>
#include <hardware/cia.h>
#include <clib/alib_protos.h>
#include <proto/asl.h>
#include <proto/dos.h>
#include <proto/exec.h>
#include <proto/intuition.h>
#include <proto/locale.h>
#include <proto/muimaster.h>
#include <proto/reqtools.h>
#include <proto/misc.h>
#include <proto/cia.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include "GALer.h"
#include "Localize.h"
/********************************** defines **********************************/
#define REG(x) register __ ## x
#define ASM __asm
#define SAVEDS __saveds
#ifndef MAKE_ID
#define MAKE_ID(a,b,c,d) ((ULONG) (a)<<24 | (ULONG) (b)<<16 | \
(ULONG) (c)<<8 | (ULONG) (d))
#endif
#define ciaa (*((struct CIA *)0xbfe001))
#define ciab (*((struct CIA *)0xbfd000))
#define HELP_FILE "PROGDIR:Doc/GALer.guide"
/******************************** functions **********************************/
#ifdef LATTICE
int CXBRK(void) { return(0); } /* disable Lattice CTRL/C handling */
int chkabort(void) { return(0); } /* really */
#endif
static void ExecuteMenu(int menu_id);
static int GetParPort(void);
static void FreeParPort(void);
static int GetCIATimer(void);
static void FreeCIATimer(void);
static void dummy_interrupt(void);
static int GetTimer(void);
static void FreeTimer(void);
static int OpenStuff(void);
static void CloseStuff(void);
void main(void);
/******************************** variables **********************************/
extern struct ReqFileRequester MyFileReqStruct;
extern struct NewGadget WriteNGad[], JEDNGad[], AsmNGad[], OptNGad[];
extern struct NewGadget RAsm16NGad[], RAsm20NGad[], SelectEditorNGad[];
extern UWORD WriteGTypes[], JEDGTypes[], AsmGTypes[], OptGTypes[];
extern UWORD RAsm16GTypes[], RAsm20GTypes[], SelectEditorGTypes[];
extern ULONG WriteGTags[], JEDGTags[], AsmGTags[], OptGTags[];
extern ULONG RAsm16GTags[], RAsm20GTags[], SelectEditorGTags[];
extern struct SysBase *SysBase; /* let the compiler's autoinit */
extern struct GfxBase *GfxBase; /* and autotermination code */
extern struct IntuitionBase *IntuitionBase; /* open/close this libraries */
extern int GALType, MaxFuseAdr, SigAdr, hw_version;
extern struct Configuration Config;
extern char *cia_timer_low, *cia_timer_high, *cia_timer_cr;
extern char cia_timer_start, cia_timer_stop;
struct IORequest *CreateExtIO();
struct Library *MUIMasterBase;
struct Library *LocaleBase;
struct Library *MiscBase;
struct Library *CIABase;
struct ReqToolsBase *ReqToolsBase;
struct MsgPort *timeport;
struct timerequest *timereq;
struct rtFileRequester *filereq;
struct Catalog *catalog;
static struct Interrupt CIATimerInterrupt =
{{0, 0, NT_INTERRUPT, 0, "GALer"}, NULL, &dummy_interrupt};
struct NewMenu MainMenu[] =
{
/* Project menu */
NM_TITLE, NULL, NULL, 0, NULL, (APTR)MEN_PROJECT,
NM_ITEM, NULL, NULL, 0, 0L, (APTR)MEN_ABOUT,
NM_ITEM, NULL, NULL, 0, NULL, (APTR)MEN_HARDVER,
NM_SUB, (STRPTR)"V1.0, V1.1", NULL, CHECKIT, 14L, (APTR)MEN_VER11,
NM_SUB, (STRPTR)"V1.2", NULL, CHECKIT, 13L, (APTR)MEN_VER12,
NM_SUB, (STRPTR)"V1.3", NULL, CHECKIT, 11L, (APTR)MEN_VER13,
/* support of elektor's GAL programming device is prepared
to implement it, add the following line to the source code
and adjust the menu localisation in the file Localize.c
NOTE: only the second version of elektor's device is supported !!!
NM_SUB, (STRPTR)"elektor II", NULL, CHECKIT, 7L, (APTR)MEN_VERELEKTOR,
*/
NM_ITEM, NULL, NULL, 0, 0L, (APTR)MEN_SAVECONFIG,
NM_ITEM, (STRPTR)NM_BARLABEL, NULL, 0, 0L, NULL,
NM_ITEM, NULL, NULL, 0, 0L, (APTR)MEN_QUIT,
/* GAL-Type menu */
NM_TITLE, NULL, NULL, 0, NULL, (APTR)MEN_GALTYPE,
NM_ITEM, NULL, NULL, CHECKIT, 14L, (APTR)MEN_16V8,
NM_ITEM, NULL, NULL, CHECKIT, 13L, (APTR)MEN_20V8,
NM_ITEM, NULL, NULL, CHECKIT, 11L, (APTR)MEN_22V10,
NM_ITEM, NULL, NULL, CHECKIT, 7L, (APTR)MEN_20RA10,
NM_ITEM, (STRPTR)NM_BARLABEL, NULL, 0, 0L, NULL,
NM_ITEM, NULL, NULL, CHECKIT|MENUTOGGLE, 0L, (APTR)MEN_TYPEREQ,
/* GAL menu */
NM_TITLE, NULL, NULL, 0, NULL, (APTR)MEN_GAL,
NM_ITEM, NULL, NULL, 0, 0L, (APTR)MEN_PROG,
NM_ITEM, NULL, NULL, 0, 0L, (APTR)MEN_COPY,
NM_ITEM, NULL, NULL, 0, 0L, (APTR)MEN_ERASE,
NM_ITEM, NULL, NULL, 0, 0L, (APTR)MEN_CMP,
NM_ITEM, NULL, NULL, 0, 0L, (APTR)MEN_CLEAR,
NM_ITEM, NULL, NULL, 0, 0L, (APTR)MEN_SETSEC,
NM_ITEM, NULL, NULL, 0, 0L, (APTR)MEN_TESTSEC,
NM_ITEM, (STRPTR)NM_BARLABEL, NULL, 0, 0L, NULL,
NM_ITEM, NULL, NULL, 0, 0L, (APTR)MEN_WRITE,
/* GAL-Assembler menu */
NM_TITLE, NULL, NULL, 0, NULL, (APTR)MEN_GALASM,
NM_ITEM, NULL, NULL, 0, 0L, (APTR)MEN_ASSEMBLE,
/* GAL-Disassembler menu */
NM_TITLE, NULL, NULL, 0, NULL, (APTR)MEN_GALDIS,
NM_ITEM, NULL, NULL, 0, 0L, (APTR)MEN_READSIG,
NM_ITEM, NULL, NULL, 0, 0L, (APTR)MEN_READACW,
NM_ITEM, NULL, NULL, 0, 0L, (APTR)MEN_READINFO,
NM_ITEM, (STRPTR)NM_BARLABEL, NULL, 0, 0L, NULL,
NM_ITEM, NULL, NULL, 0, 0L, (APTR)MEN_READJED,
NM_ITEM, NULL, NULL, 0, 0L, (APTR)MEN_READJEDPARA,
NM_ITEM, (STRPTR)NM_BARLABEL, NULL, 0, 0L, NULL,
NM_ITEM, NULL, NULL, 0, 0L, (APTR)MEN_REASM,
/* Tools menu */
NM_TITLE, NULL, NULL, 0, NULL, (APTR)MEN_TOOLS,
NM_ITEM, NULL, NULL, 0, 0L, (APTR)MEN_SHOWPIN,
NM_ITEM, NULL, NULL, 0, 0L, (APTR)MEN_CLEARPIN,
NM_ITEM, NULL, NULL, 0, 0L, (APTR)MEN_CALLCHECKER,
NM_ITEM, (STRPTR)NM_BARLABEL, NULL, 0, 0L, NULL,
NM_ITEM, NULL, NULL, 0, 0L, (APTR)MEN_OPTIMIZER,
NM_ITEM, (STRPTR)NM_BARLABEL, NULL, 0, 0L, NULL,
NM_ITEM, NULL, NULL, 0, 0L, (APTR)MEN_EDIT,
NM_ITEM, NULL, NULL, 0, 0L, (APTR)MEN_CALLEDIT,
NM_ITEM, (STRPTR)NM_BARLABEL, NULL, 0, 0L, NULL,
NM_ITEM, NULL, NULL, 0, 0L, (APTR)MEN_HELP,
NM_END, NULL, NULL, 0, 0L, NULL
};
static UBYTE prog_name[] = "GALer";
static UBYTE version[] = "$VER: GALer V2.0 (17.04.96)";
UBYTE main_win_title[] = "GALer V2.0 © 1996 by Christian Habermann GAL16V8 ";
WORD selected_timer;
int checker_mode;
LONG __stack = 8192;
APTR app, main_win;
APTR menustrip, menu_project, menu_galtype, menu_gal, /* menu items */
menu_asm, menu_galdis, menu_tools, menu_checker;
APTR GAL_txt[34]; /* used to store pointers */
/* to the GAL text fields */
APTR GAL_gads[32]; /* used to store the pointers */
/* to the GAL gadgets */
APTR LV_text; /* list view for text outputs */
void main(void)
{
ULONG signals, id;
if (!OpenStuff()) /* open libs, windows... */
{
CloseStuff();
exit(20);
}
/* parallel port free? */
if (!GetParPort())
{
puts((char *)AppStrings[MSG_ERR_PARPORT].as_Str);
CloseStuff();
exit(20);
}
/* get any CIA timer */
if (!GetCIATimer())
{
FreeParPort();
puts((char *)AppStrings[MSG_ERR_CIATIMER].as_Str);
CloseStuff();
exit(20);
}
/* open timer device */
if (!GetTimer())
{
FreeParPort();
FreeCIATimer();
puts((char *)AppStrings[MSG_ERR_TIMER].as_Str);
CloseStuff();
exit(20);
}
InitHardware(); /* init hardware */
EnableOutput(); /* enable outputs */
LoadConfig(); /* load configuration */
for (;;)
{
id = DoMethod(app, MUIM_Application_Input, &signals);
/* quit or window's close */
/* gadget selected? */
if (id == MEN_QUIT || id == MUIV_Application_ReturnID_Quit)
{
if (TxtRequest(AppStrings[MSG_ASKQUIT_TXT].as_Str,
AppStrings[MSG_CONT_GAD].as_Str,
AppStrings[MSG_CANCEL_GAD].as_Str))
break;
}
/* gadget of the symbolic GAL */
/* selected? */
if (id >= FIRST_GAL_GADID &&
id < FIRST_GAL_GADID + NUM_OF_GAL_GADGETS &&
checker_mode == ON)
Checker(id);
/* menu selected? */
if (id >= FIRST_MENU_ID && id <= LAST_MENU_ID)
ExecuteMenu(id);
if (signals)
Wait(signals); /* wait for next event */
}
FreeParPort(); /* shut down */
FreeCIATimer();
FreeTimer();
CloseStuff();
exit(0);
}
/******************************************************************************
** ExecuteMenu()
*******************************************************************************
** input: menu_id ID of the selected menu item
**
** output: none
**
** remarks: does execute the selected menu
******************************************************************************/
static void ExecuteMenu(int menu_id)
{
switch (menu_id)
{
/* Project menu */
case MEN_ABOUT: /* about */
About();
break;
/* hardware versions */
case MEN_VER11:
DoMethod(main_win, MUIM_Window_SetMenuState, MEN_22V10, FALSE);
DoMethod(main_win, MUIM_Window_SetMenuState, MEN_20RA10, FALSE);
if (GALType == GAL22V10 || GALType == GAL20RA10)
SetGALType(GAL16V8);
Config.HardwareVersion = hw_version = HW_GALER_1_0;
InitHardware();
break;
case MEN_VER12:
DoMethod(main_win, MUIM_Window_SetMenuState, MEN_22V10, FALSE);
DoMethod(main_win, MUIM_Window_SetMenuState, MEN_20RA10, FALSE);
if (GALType == GAL22V10 || GALType == GAL20RA10)
SetGALType(GAL16V8);
Config.HardwareVersion = hw_version = HW_GALER_1_2;
InitHardware();
break;
case MEN_VER13:
DoMethod(main_win, MUIM_Window_SetMenuState, MEN_22V10, TRUE);
DoMethod(main_win, MUIM_Window_SetMenuState, MEN_20RA10, TRUE);
Config.HardwareVersion = hw_version = HW_GALER_1_3;
InitHardware();
break;
case MEN_VERELEKTOR:
DoMethod(main_win, MUIM_Window_SetMenuState, MEN_22V10, TRUE);
DoMethod(main_win, MUIM_Window_SetMenuState, MEN_20RA10, TRUE);
DoMethod(main_win, MUIM_Window_SetMenuState, MEN_CALLCHECKER, FALSE);
Config.HardwareVersion = hw_version = HW_ELEKTOR_II;
InitHardware();
break;
case MEN_SAVECONFIG: /* save configuration */
SaveConfig();
break;
/* quit is dealed in */
/* the main loop */
/* GAL-type menu */
case MEN_16V8: /* GAL16V8 */
SetGALType(GAL16V8);
break;
case MEN_20V8: /* GAL20V8 */
SetGALType(GAL20V8);
break;
case MEN_22V10: /* GAL22V10 */
SetGALType(GAL22V10);
break;
case MEN_20RA10: /* GAL20RA10 */
SetGALType(GAL20RA10);
break;
case MEN_TYPEREQ: /* type requester */
Config.GALTypeReq = !Config.GALTypeReq;
break;
/* GAL menu */
case MEN_PROG:
ProgramGAL(); /* program GAL */
break;
case MEN_COPY: /* copy */
CopyGAL();
break;
case MEN_ERASE: /* erase */
Loeschen();
break;
case MEN_CMP: /* compare */
Compare();
break;
case MEN_CLEAR: /* is GAL clear */
Leertest();
break;
case MEN_SETSEC: /* set security bit */
SetSecurity(YES);
break;
case MEN_TESTSEC: /* test security bit */
TestSecurity();
break;
case MEN_WRITE: /* how to read/prog GALs */
Schreibverhalten();
break;
/* GAL assembler menu */
case MEN_ASSEMBLE:
AssembleInputFile(ASSEMBLER); /* call assembler */
break;
/* GAL disassembler menu */
case MEN_READSIG:
PrintSignature(); /* print GAL's signature */
break;
case MEN_READACW: /* print ACW */
PrintACW();
break;
case MEN_READINFO: /* print some infos */
GALInfo(); /* about the GAL */
break;
case MEN_READJED: /* get JEDEC */
PutJedec();
break;
/* parameters for getting JEDEC */
case MEN_READJEDPARA:
JedecRequester();
break;
case MEN_REASM: /* call reassembler */
Reassembler();
break;
/* tools menu */
case MEN_SHOWPIN:
PrintPinNames(); /* show pin names */
break;
case MEN_CLEARPIN: /* clear pin names */
ResetPinNames();
break;
case MEN_CALLCHECKER: /* switch GAL checker on */
ToggleChecker();
break;
case MEN_OPTIMIZER: /* optimizer */
Optimizer();
break;
case MEN_EDIT: /* select editor */
SelectEditor();
break;
case MEN_CALLEDIT: /* call selected editor */
CallEditor();
break;
case MEN_HELP: /* help */
HelpOnHelp();
break;
/* GAL checker menu */
case MEN_EXITCHECKER:
ToggleChecker(); /* exit GAL checker */
break;
}
}
/******************************************************************************
** GetParPort()
*******************************************************************************
** input: none
**
** output: TRUE: ok
** FALSE: parallel port in use
**
** remarks: allocate Amiga's parallel port
******************************************************************************/
static int GetParPort(void)
{
/* get parallel port */
if (!(MiscBase = (struct Library *)OpenResource(MISCNAME)))
{
return FALSE;
}
if (AllocMiscResource(MR_PARALLELPORT, prog_name))
{
return FALSE;
}
if (AllocMiscResource(MR_PARALLELBITS, prog_name))
{
FreeMiscResource(MR_PARALLELPORT);
return FALSE;
}
InitParPort(); /* init data direction register */
return TRUE;
}
/******************************************************************************
** FreeParPort()
*******************************************************************************
** input: none
** output: none
**
** remarks: free Amiga's parallel port
******************************************************************************/
static void FreeParPort(void)
{
RestoreParPort(); /* restore the state of the */
/* parallel port */
FreeMiscResource(MR_PARALLELBITS); /* free parallel port */
FreeMiscResource(MR_PARALLELPORT);
}
/******************************************************************************
** GetCIATimer()
*******************************************************************************
** input: none
** output: TRUE: o.k.
** FALSE: failed to get any CIA timer
**
** remarks: try to get one of the four CIA timers and initialize it
******************************************************************************/
static int GetCIATimer(void)
{
/* at first try to get one of the CIA-A timers */
if ((CIABase = (struct Library *)OpenResource(CIAANAME)))
{
/* try to get timer A */
/* (interrupt is just a dummy) */
if (!(AddICRVector(CIABase, CIAICRB_TA, &CIATimerInterrupt)))
{
AbleICR(CIABase, CIAICRB_TA); /* disable timer A interrupt */
selected_timer = CIAICRB_TA;
cia_timer_low = &ciaa.ciatalo; /* init some variables */
cia_timer_high = &ciaa.ciatahi;
cia_timer_cr = &ciaa.ciacra;
cia_timer_start = ciaa.ciacra & (CIACRAF_SPMODE | CIACRAF_TODIN) |
CIACRAF_START | CIACRAF_LOAD;
cia_timer_stop = cia_timer_start & ~CIACRAF_START;
return TRUE;
}
/* try to get timer B */
if (!(AddICRVector(CIABase, CIAICRB_TB, &CIATimerInterrupt)))
{
AbleICR(CIABase, CIAICRB_TB); /* disable timer B interrupt */
selected_timer = CIAICRB_TB;
cia_timer_low = &ciaa.ciatblo; /* init some variables */
cia_timer_high = &ciaa.ciatbhi;
cia_timer_cr = &ciaa.ciacrb;
cia_timer_start = ciaa.ciacrb & CIACRBF_ALARM |
CIACRBF_START | CIACRBF_LOAD;
cia_timer_stop = cia_timer_start & ~CIACRBF_START;
return TRUE;
}
}
/* now try to get one of the CIA-B timers */
if ((CIABase = (struct Library *)OpenResource(CIABNAME)))
{
/* try to get timer A */
if (!(AddICRVector(CIABase, CIAICRB_TA, &CIATimerInterrupt)))
{
AbleICR(CIABase, CIAICRB_TA); /* disable timer A interrupt */
selected_timer = CIAICRB_TA;
cia_timer_low = &ciab.ciatalo; /* init some variables */
cia_timer_high = &ciab.ciatahi;
cia_timer_cr = &ciab.ciacra;
cia_timer_start = ciab.ciacra & (CIACRAF_SPMODE | CIACRAF_TODIN) |
CIACRAF_START | CIACRAF_LOAD;
cia_timer_stop = cia_timer_start & ~CIACRAF_START;
return TRUE;
}
/* try to get timer B */
if (!(AddICRVector(CIABase, CIAICRB_TB, &CIATimerInterrupt)))
{
AbleICR(CIABase, CIAICRB_TB); /* disable timer B interrupt */
selected_timer = CIAICRB_TB;
cia_timer_low = &ciab.ciatblo; /* init some variables */
cia_timer_high = &ciab.ciatbhi;
cia_timer_cr = &ciab.ciacrb;
cia_timer_start = ciab.ciacrb & CIACRBF_ALARM |
CIACRBF_START | CIACRBF_LOAD;
cia_timer_stop = cia_timer_start & ~CIACRBF_START;
return TRUE;
}
}
return FALSE;
}
/******************************************************************************
** FreeCIATimer()
*******************************************************************************
** input: none
** output: none
**
** remarks: free CIA timer
******************************************************************************/
static void FreeCIATimer(void)
{
RemICRVector(CIABase, selected_timer, &CIATimerInterrupt);
}
/******************************************************************************
** dummy_interrupt()
*******************************************************************************
** input: none
** output: none
**
** remarks: This is just a dummy function. It's needed for the interrupt
** structure necessary to test whether or not a CIA timer is free.
** __interrupt is a SAS-C keyword. This keyword turns off stack
** checking.
******************************************************************************/
__interrupt static void dummy_interrupt(void)
{
return;
}
/******************************************************************************
** GetTimer()
*******************************************************************************
** input: none
**
** output: TRUE: ok
** FALSE: failed
**
** remarks: open timer device
******************************************************************************/
static int GetTimer(void)
{
timeport = (struct MsgPort *)CreatePort(0L, 0L);
if (timeport == NULL)
return FALSE;
timereq = (struct timerequest *)AllocMem((long)sizeof(struct timerequest),
MEMF_PUBLIC);
if (timereq == NULL)
{
DeletePort(timeport);
return FALSE;
}
timereq->tr_node.io_Message.mn_Node.ln_Type = NT_MESSAGE;
timereq->tr_node.io_Message.mn_Node.ln_Pri = 0;
timereq->tr_node.io_Message.mn_ReplyPort = timeport;
if (OpenDevice(TIMERNAME, UNIT_MICROHZ, (struct IORequest *)timereq, 0L))
{
FreeMem(&timereq, (long)sizeof(struct timerequest));
DeletePort (timeport);
return FALSE;
}
return TRUE;
}
/******************************************************************************
** FreeTimer()
*******************************************************************************
** input: none
** output: none
**
** remarks: free the timer device
******************************************************************************/
static void FreeTimer(void)
{
CloseDevice((struct IORequest *)timereq);
FreeMem(timereq, (long)sizeof(struct timerequest));
DeletePort(timeport);
}
/******************************************************************************
** OpenStuff()
*******************************************************************************
** input: none
**
** output: TRUE: ok
** FALSE: something failed
**
** remarks: does open all libraries and the MUI application
******************************************************************************/
static int OpenStuff(void)
{
int n;
LONG open;
if ((LocaleBase = OpenLibrary("locale.library", 38L)))
catalog = OpenCatalog(NULL, (STRPTR)"GALer.catalog", OC_Version, 2,
TAG_DONE);
LocalizeText();
if (!(ReqToolsBase = (struct ReqToolsBase *)OpenLibrary(REQTOOLSNAME,
REQTOOLSVERSION)))
{
puts((char *)AppStrings[MSG_ERR_REQTOOLSLIB].as_Str);
return FALSE;
}
if (!(filereq = rtAllocRequestA(RT_FILEREQ, NULL)))
{
puts((char *)AppStrings[MSG_ERR_FILEREQ].as_Str);
return FALSE;
}
if (!(MUIMasterBase = OpenLibrary(MUIMASTER_NAME, MUIMASTER_VMIN)))
{
puts((char *)AppStrings[MSG_ERR_MUILIB].as_Str);
return FALSE;
}
app = ApplicationObject,
MUIA_Application_Title, "GALer",
MUIA_Application_Version, "$VER: GALer 2.0 (05.04.1996)",
MUIA_Application_Copyright, "©1991/96, Christian Habermann",
MUIA_Application_Author, "Christian Habermann",
MUIA_Application_Description, "Software to program GALs.",
MUIA_Application_Base, "GALER",
MUIA_Application_HelpFile, HELP_FILE,
MUIA_Application_Menustrip, menustrip =
MUI_MakeObject(MUIO_MenustripNM,
MainMenu, 0),
SubWindow, main_win = WindowObject,
MUIA_Window_Title, main_win_title,
MUIA_Window_ID, MAKE_ID('G','A','L','E'),
MUIA_HelpNode, "Main",
WindowContents, GroupObject,
Child, ColGroup(6), GroupFrameT("GAL"),
MUIA_Group_VertSpacing, 0,
/* pins 1 and 24 */
Child, GAL_gads[0] = SimpleButton("L"),
Child, GAL_txt[0] = TextObject,
MUIA_Background, MUII_TextBack,
MUIA_Frame, MUIV_Frame_Text,
MUIA_Text_Contents, "\33rnoname \33b1",
MUIA_Text_SetMin, TRUE,
End,
Child, GAL_txt[23] = TextObject,
MUIA_Background, MUII_TextBack,
MUIA_Frame, MUIV_Frame_Text,
MUIA_Text_Contents, "\33b24\33n noname",
MUIA_Text_SetMin, TRUE,
End,
Child, HSpace(0),
Child, HSpace(0),
Child, HSpace(0),
/* pins 2 and 23 */
Child, GAL_gads[1] = SimpleButton("L"),
Child, GAL_txt[1] = TextObject,
MUIA_Background, MUII_TextBack,
MUIA_Frame, MUIV_Frame_Text,
MUIA_Text_Contents, "\33rnoname \33b2",
MUIA_Text_SetMin, TRUE,
End,
Child, GAL_txt[22] = TextObject,
MUIA_Background, MUII_TextBack,
MUIA_Frame, MUIV_Frame_Text,
MUIA_Text_Contents, "\33b23\33n noname",
MUIA_Text_SetMin, TRUE,
End,
Child, GAL_txt[33] = TextObject,
MUIA_Background, MUII_TextBack, MUIA_Frame, MUIV_Frame_None,
MUIA_Text_Contents, "Z",
MUIA_Text_SetMin, TRUE,
MUIA_Text_SetMax, TRUE,
End,
Child, GAL_gads[21] = SimpleButton("L"),
Child, GAL_gads[31] = SimpleButton("O"),
/* pins 3 and 22 */
Child, GAL_gads[2] = SimpleButton("L"),
Child, GAL_txt[2] = TextObject,
MUIA_Background, MUII_TextBack,
MUIA_Frame, MUIV_Frame_Text,
MUIA_Text_Contents, "\33rnoname \33b3",
MUIA_Text_SetMin, TRUE,
End,
Child, GAL_txt[21] = TextObject,
MUIA_Background, MUII_TextBack,
MUIA_Frame, MUIV_Frame_Text,
MUIA_Text_Contents, "\33b22\33n noname",
MUIA_Text_SetMin, TRUE,
End,
Child, GAL_txt[32] = TextObject,
MUIA_Background, MUII_TextBack,
MUIA_Frame, MUIV_Frame_None,
MUIA_Text_Contents, "Z",
MUIA_Text_SetMin, TRUE,
MUIA_Text_SetMax, TRUE,
End,
Child, GAL_gads[20] = SimpleButton("L"),
Child, GAL_gads[30] = SimpleButton("O"),
/* pins 4 and 21 */
Child, GAL_gads[3] = SimpleButton("L"),
Child, GAL_txt[3] = TextObject,
MUIA_Background, MUII_TextBack,
MUIA_Frame, MUIV_Frame_Text,
MUIA_Text_Contents, "\33rnoname \33b4",
MUIA_Text_SetMin, TRUE,
End,
Child, GAL_txt[20] = TextObject,
MUIA_Background, MUII_TextBack,
MUIA_Frame, MUIV_Frame_Text,
MUIA_Text_Contents, "\33b21\33n noname",
MUIA_Text_SetMin, TRUE,
End,
Child, GAL_txt[31] = TextObject,
MUIA_Background, MUII_TextBack,
MUIA_Frame, MUIV_Frame_None,
MUIA_Text_Contents, "Z",
MUIA_Text_SetMin, TRUE,
MUIA_Text_SetMax, TRUE,
End,
Child, GAL_gads[19] = SimpleButton("L"),
Child, GAL_gads[29] = SimpleButton("O"),
/* pins 5 and 20 */
Child, GAL_gads[4] = SimpleButton("L"),
Child, GAL_txt[4] = TextObject,
MUIA_Background, MUII_TextBack,
MUIA_Frame, MUIV_Frame_Text,
MUIA_Text_Contents, "\33rnoname \33b5",
MUIA_Text_SetMin, TRUE,
End,
Child, GAL_txt[19] = TextObject,
MUIA_Background, MUII_TextBack,
MUIA_Frame, MUIV_Frame_Text,
MUIA_Text_Contents, "\33b20\33n noname",
MUIA_Text_SetMin, TRUE,
End,
Child, GAL_txt[30] = TextObject,
MUIA_Background, MUII_TextBack,
MUIA_Frame, MUIV_Frame_None,
MUIA_Text_Contents, "Z",
MUIA_Text_SetMin, TRUE,
MUIA_Text_SetMax, TRUE,
End,
Child, GAL_gads[18] = SimpleButton("L"),
Child, GAL_gads[28] = SimpleButton("O"),
/* pins 6 and 19 */
Child, GAL_gads[5] = SimpleButton("L"),
Child, GAL_txt[5] = TextObject,
MUIA_Background, MUII_TextBack,
MUIA_Frame, MUIV_Frame_Text,
MUIA_Text_Contents, "\33rnoname \33b6",
MUIA_Text_SetMin, TRUE,
End,
Child, GAL_txt[18] = TextObject,
MUIA_Background, MUII_TextBack,
MUIA_Frame, MUIV_Frame_Text,
MUIA_Text_Contents, "\33b19\33n noname",
MUIA_Text_SetMin, TRUE,
End,
Child, GAL_txt[29] = TextObject,
MUIA_Background, MUII_TextBack,
MUIA_Frame, MUIV_Frame_None,
MUIA_Text_Contents, "Z",
MUIA_Text_SetMin, TRUE,
MUIA_Text_SetMax, TRUE,
End,
Child, GAL_gads[17] = SimpleButton("L"),
Child, GAL_gads[27] = SimpleButton("O"),
/* pins 7 and 18 */
Child, GAL_gads[6] = SimpleButton("L"),
Child, GAL_txt[6] = TextObject,
MUIA_Background, MUII_TextBack,
MUIA_Frame, MUIV_Frame_Text,
MUIA_Text_Contents, "\33rnoname \33b7",
MUIA_Text_SetMin, TRUE,
End,
Child, GAL_txt[17] = TextObject,
MUIA_Background, MUII_TextBack,
MUIA_Frame, MUIV_Frame_Text,
MUIA_Text_Contents, "\33b18\33n noname",
MUIA_Text_SetMin, TRUE,
End,
Child, GAL_txt[28] = TextObject,
MUIA_Background, MUII_TextBack,
MUIA_Frame, MUIV_Frame_None,
MUIA_Text_Contents, "Z",
MUIA_Text_SetMin, TRUE,
MUIA_Text_SetMax, TRUE,
End,
Child, GAL_gads[16] = SimpleButton("L"),
Child, GAL_gads[26] = SimpleButton("O"),
/* pins 8 and 17 */
Child, GAL_gads[7] = SimpleButton("L"),
Child, GAL_txt[7] = TextObject,
MUIA_Background, MUII_TextBack,
MUIA_Frame, MUIV_Frame_Text,
MUIA_Text_Contents, "\33rnoname \33b8",
MUIA_Text_SetMin, TRUE,
End,
Child, GAL_txt[16] = TextObject,
MUIA_Background, MUII_TextBack,
MUIA_Frame, MUIV_Frame_Text,
MUIA_Text_Contents, "\33b17\33n noname",
MUIA_Text_SetMin, TRUE,
End,
Child, GAL_txt[27] = TextObject,
MUIA_Background, MUII_TextBack,
MUIA_Frame, MUIV_Frame_None,
MUIA_Text_Contents, "Z",
MUIA_Text_SetMin, TRUE,
MUIA_Text_SetMax, TRUE,
End,
Child, GAL_gads[15] = SimpleButton("L"),
Child, GAL_gads[25] = SimpleButton("O"),
/* pins 9 and 16 */
Child, GAL_gads[8] = SimpleButton("L"),
Child, GAL_txt[8] = TextObject,
MUIA_Background, MUII_TextBack,
MUIA_Frame, MUIV_Frame_Text,
MUIA_Text_Contents, "\33rnoname \33b9",
MUIA_Text_SetMin, TRUE,
End,
Child, GAL_txt[15] = TextObject,
MUIA_Background, MUII_TextBack,
MUIA_Frame, MUIV_Frame_Text,
MUIA_Text_Contents, "\33b16\33n noname",
MUIA_Text_SetMin, TRUE,
End,
Child, GAL_txt[26] = TextObject,
MUIA_Background, MUII_TextBack,
MUIA_Frame, MUIV_Frame_None,
MUIA_Text_Contents, "Z",
MUIA_Text_SetMin, TRUE,
MUIA_Text_SetMax, TRUE,
End,
Child, GAL_gads[14] = SimpleButton("L"),
Child, GAL_gads[24] = SimpleButton("O"),
/* pins 10 and 15 */
Child, GAL_gads[9] = SimpleButton("L"),
Child, GAL_txt[9] = TextObject,
MUIA_Background, MUII_TextBack,
MUIA_Frame, MUIV_Frame_Text,
MUIA_Text_Contents, "\33rnoname \33b10",
MUIA_Text_SetMin, TRUE,
End,
Child, GAL_txt[14] = TextObject,
MUIA_Background, MUII_TextBack,
MUIA_Frame, MUIV_Frame_Text,
MUIA_Text_Contents, "\33b15\33n noname",
MUIA_Text_SetMin, TRUE,
End,
Child, GAL_txt[25] = TextObject,
MUIA_Background, MUII_TextBack,
MUIA_Frame, MUIV_Frame_None,
MUIA_Text_Contents, "Z",
MUIA_Text_SetMin, TRUE,
MUIA_Text_SetMax, TRUE,
End,
Child, GAL_gads[13] = SimpleButton("L"),
Child, GAL_gads[23] = SimpleButton("O"),
/* pins 11 and 14 */
Child, GAL_gads[10] = SimpleButton("L"),
Child, GAL_txt[10] = TextObject,
MUIA_Background, MUII_TextBack,
MUIA_Frame, MUIV_Frame_Text,
MUIA_Text_Contents, "\33rnoname \33b11",
MUIA_Text_SetMin, TRUE,
End,
Child, GAL_txt[13] = TextObject,
MUIA_Background, MUII_TextBack,
MUIA_Frame, MUIV_Frame_Text,
MUIA_Text_Contents, "\33b14\33n noname",
MUIA_Text_SetMin, TRUE,
End,
Child, GAL_txt[24] = TextObject,
MUIA_Background, MUII_TextBack,
MUIA_Frame, MUIV_Frame_None,
MUIA_Text_Contents, "Z",
MUIA_Text_SetMin, TRUE,
MUIA_Text_SetMax, TRUE,
End,
Child, GAL_gads[12] = SimpleButton("L"),
Child, GAL_gads[22] = SimpleButton("O"),
/* pins 12 and 13 */
Child, HSpace(0),
Child, GAL_txt[11] = TextObject,
MUIA_Background, MUII_TextBack,
MUIA_Frame, MUIV_Frame_Text,
MUIA_Text_Contents, "\33rnoname \33b12",
MUIA_Text_SetMin, TRUE,
End,
Child, GAL_txt[12] = TextObject,
MUIA_Background, MUII_TextBack,
MUIA_Frame, MUIV_Frame_Text,
MUIA_Text_Contents, "\33b13\33n noname",
MUIA_Text_SetMin, TRUE,
End,
Child, HSpace(0),
Child, GAL_gads[11] = SimpleButton("L"),
Child, HSpace(0),
End,
Child, LV_text = ListviewObject,
MUIA_Listview_Input, FALSE,
MUIA_Listview_List, ListObject,
MUIA_List_ConstructHook, MUIV_List_ConstructHook_String,
MUIA_List_DestructHook, MUIV_List_DestructHook_String,
ReadListFrame,
End,
End,
End,
End,
End;
/* checker menu */
menu_checker = MenuObject, MUIA_Menu_Title,
AppStrings[MSG_CHECKER_MENU1].as_Str,
MUIA_Family_Child, MUI_MakeObject(MUIO_Menuitem,
AppStrings[MSG_CHECKER_MENU1_ITEM1].as_Str,
AppStrings[MSG_CHECKER_MENU1_ITEM1_COMMKEY].as_Str,
0, MEN_EXITCHECKER),
End;
/* set gadget IDs of all */
/* GAL gadgets */
for (n = 0; n < NUM_OF_GAL_GADGETS; n++)
DoMethod(GAL_gads[n], MUIM_Notify, MUIA_Pressed, FALSE,
app, 2, MUIM_Application_ReturnID, FIRST_GAL_GADID + n);
if (!app || !menu_checker)
{
puts((char *)AppStrings[MSG_ERR_APPLICATION].as_Str);
return FALSE;
}
/* get pointers to the menu objects of the main menu */
/* with this pointers the main menu can be removed */
/* and the GAL checker menu can be added */
menu_project = (APTR)DoMethod(menustrip, MUIM_FindUData, MEN_PROJECT);
menu_galtype = (APTR)DoMethod(menustrip, MUIM_FindUData, MEN_GALTYPE);
menu_gal = (APTR)DoMethod(menustrip, MUIM_FindUData, MEN_GAL);
menu_asm = (APTR)DoMethod(menustrip, MUIM_FindUData, MEN_GALASM);
menu_galdis = (APTR)DoMethod(menustrip, MUIM_FindUData, MEN_GALDIS);
menu_tools = (APTR)DoMethod(menustrip, MUIM_FindUData, MEN_TOOLS);
/* show menu help text when the user */
/* does press the HELP-key while the */
/* mouse is over a menu item */
DoMethod(app, MUIM_Notify, MUIA_Application_MenuHelp, MUIV_EveryTime,
app, 5, MUIM_Application_ShowHelp, main_win, HELP_FILE,
"Menus", 0);
/* let GALer know when the close */
/* gadget is selected */
DoMethod(main_win, MUIM_Notify, MUIA_Window_CloseRequest, TRUE,
app, 2, MUIM_Application_ReturnID, MUIV_Application_ReturnID_Quit);
set(main_win, MUIA_Window_Open, TRUE); /* open the main window */
get(main_win, MUIA_Window_Open, &open);
if (!open)
{
puts((char *)AppStrings[MSG_ERR_OPENWINDOW].as_Str);
return FALSE;
}
return TRUE;
}
/******************************************************************************
** CloseStuff()
*******************************************************************************
** input: none
** output: none
**
** remarks: close libraries and the MUI application
******************************************************************************/
static void CloseStuff(void)
{
if (filereq)
rtFreeRequest(filereq);
if (ReqToolsBase)
CloseLibrary((struct Library *)ReqToolsBase);
if (LocaleBase)
{
CloseCatalog(catalog);
CloseLibrary (LocaleBase);
}
if (app) /* close MUI application */
MUI_DisposeObject(app);
if (MUIMasterBase)
CloseLibrary(MUIMasterBase);
}
/* EOF */